package com.wpen.unit.infra.repository.job.impl;

import java.io.Serializable;
import java.util.List;

import com.wpen.unit.infra.repository.job.JobExec1RedologRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.wpen.unit.exception.UpdateZeroException;
import com.wpen.unit.infra.mybatis.job.mapper.JobExec1RedologMapper;
import com.wpen.unit.infra.mybatis.job.po.JobExec1RedologPo;
import com.wpen.unit.infra.mybatis.job.po.JobExec1RedologPo.JobExec1RedologColumns;
import com.wpen.unit.utils.StringUtil;

/**
 * 任务作业执行1重跑历史日志维护.
 * 
 * @author Wang Peng
 * @date 2023-01-18
 *
 */
@Repository
@Transactional
public class JobExec1RedologRepositoryImpl extends ServiceImpl<JobExec1RedologMapper, JobExec1RedologPo>
		implements JobExec1RedologRepository {

	@Override
	public JobExec1RedologPo queryByJobLogId(Long jobLogid, Long triggerTime) {
		QueryWrapper<JobExec1RedologPo> queryWrapper = Wrappers.query();
		queryWrapper.eq(JobExec1RedologColumns.JOB_LOG_ID.name(), jobLogid);
		queryWrapper.eq(JobExec1RedologColumns.TASK_TRIGGER_TIME.name(), triggerTime);
		List<JobExec1RedologPo> redologPos = getBaseMapper().selectList(queryWrapper);
		if (redologPos != null && !redologPos.isEmpty()) {
			return redologPos.get(0);
		}
		return null;
	}

	@Override
	public long count(JobExec1RedologPo jobExec1RedologPo) {
		QueryWrapper<JobExec1RedologPo> queryWrapper = createQuery(jobExec1RedologPo);
		return super.count(queryWrapper);
	}

	@Override
	public List<JobExec1RedologPo> queryList(int index, int size, JobExec1RedologPo jobExec1RedologPo) {
		QueryWrapper<JobExec1RedologPo> queryWrapper = createQuery(jobExec1RedologPo);
		if (size > 0) {
			Page<JobExec1RedologPo> page = new Page<>(index, size, false);
			return super.page(page, queryWrapper).getRecords();
		}
		// queryWrapper.orderBy(true, false, JobExec1RedologColumns.ID.name());
		return getBaseMapper().selectList(queryWrapper);
	}

	private QueryWrapper<JobExec1RedologPo> createQuery(JobExec1RedologPo jobExec1RedologPo) {
		QueryWrapper<JobExec1RedologPo> queryWrapper = Wrappers.query();
		if (jobExec1RedologPo.getId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.ID.name(), jobExec1RedologPo.getId());
		}
		if (jobExec1RedologPo.getJobLogId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.JOB_LOG_ID.name(), jobExec1RedologPo.getJobLogId());
		}
		if (jobExec1RedologPo.getBatchExecLogId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.BATCH_EXEC_LOG_ID.name(), jobExec1RedologPo.getBatchExecLogId());
		}
		if (jobExec1RedologPo.getTaskExecLogId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.TASK_EXEC_LOG_ID.name(), jobExec1RedologPo.getTaskExecLogId());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getBizCode())) {
			queryWrapper.eq(JobExec1RedologColumns.BIZ_CODE.name(), jobExec1RedologPo.getBizCode());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getBatchCode())) {
			queryWrapper.eq(JobExec1RedologColumns.BATCH_CODE.name(), jobExec1RedologPo.getBatchCode());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getTaskCode())) {
			queryWrapper.eq(JobExec1RedologColumns.TASK_CODE.name(), jobExec1RedologPo.getTaskCode());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getJobCode())) {
			queryWrapper.eq(JobExec1RedologColumns.JOB_CODE.name(), jobExec1RedologPo.getJobCode());
		}
		return queryWrapper;
	}

	@Override
	public JobExec1RedologPo queryFirst(JobExec1RedologPo jobExec1RedologPo) {
		QueryWrapper<JobExec1RedologPo> queryWrapper = Wrappers.query();
		if (jobExec1RedologPo.getId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.ID.name(), jobExec1RedologPo.getId());
		}
		if (jobExec1RedologPo.getJobLogId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.JOB_LOG_ID.name(), jobExec1RedologPo.getJobLogId());
		}
		if (jobExec1RedologPo.getBatchExecLogId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.BATCH_EXEC_LOG_ID.name(), jobExec1RedologPo.getBatchExecLogId());
		}
		if (jobExec1RedologPo.getTaskExecLogId() != null) {
			queryWrapper.eq(JobExec1RedologColumns.TASK_EXEC_LOG_ID.name(), jobExec1RedologPo.getTaskExecLogId());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getBizCode())) {
			queryWrapper.eq(JobExec1RedologColumns.BIZ_CODE.name(), jobExec1RedologPo.getBizCode());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getBatchCode())) {
			queryWrapper.eq(JobExec1RedologColumns.BATCH_CODE.name(), jobExec1RedologPo.getBatchCode());
		}
		if (StringUtil.isNotEmpty(jobExec1RedologPo.getTaskCode())) {
			queryWrapper.eq(JobExec1RedologColumns.TASK_CODE.name(), jobExec1RedologPo.getTaskCode());
		}
		// queryWrapper.orderBy(true, false, JobExec1RedologPoColumns.ID.name());
		return super.getOne(queryWrapper);
	}

	@Override
	public JobExec1RedologPo queryById(Serializable id) {
		return super.getById(id);
	}

	@Override
	public boolean insert(JobExec1RedologPo jobExec1RedologPo) {
//        jobExec1RedologPo.setVersion(1);
		jobExec1RedologPo.setUpdateTime(new java.sql.Timestamp(System.currentTimeMillis()));
		return super.save(jobExec1RedologPo);
	}

	@Override
	public boolean insertBatch(List<JobExec1RedologPo> listJobExec1RedologPos) {
		if (listJobExec1RedologPos == null || listJobExec1RedologPos.isEmpty()) {
			return true;
		}
		int rs = getBaseMapper().insertBatchSomeColumn(listJobExec1RedologPos);
		return SqlHelper.retBool(rs);
	}

	@Override
	public boolean updateById(JobExec1RedologPo jobExec1RedologPo) {
		UpdateWrapper<JobExec1RedologPo> updateWrapper = Wrappers.update();
		updateWrapper.eq(JobExec1RedologColumns.ID.name(), jobExec1RedologPo.getId());
//        updateWrapper.eq(JobExec1RedologColumns.VERSION.name(), jobExec1RedologPo.getVersion());
//        jobExec1RedologPo.setVersion(jobExec1RedologPo.getVersion() + 1);
		boolean rs = super.update(jobExec1RedologPo, updateWrapper);
		// 根据ID更新所有字段，空值也更新
		// int num = getBaseMapper().alwaysUpdateSomeColumnById(ucpBatchInfoPo);
		// boolean rs = SqlHelper.retBool(num);
		if (!rs) {
			throw new UpdateZeroException();
		}
		return rs;
	}

	@Override
	public boolean deleteByIds(Serializable[] ids) {
		UpdateWrapper<JobExec1RedologPo> updateWrapper = Wrappers.update();
		updateWrapper.in(JobExec1RedologColumns.ID.name(), (Object[]) ids);
		return super.remove(updateWrapper);
	}

//    public JobExec1RedologPo queryByExample(JobExec1RedologPo jobExec1RedologPo) {
//        QueryWrapper<JobExec1RedologPo> queryWrapper = Wrappers.query();
//        if (jobExec1RedologPo.getId() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.ID.name(), jobExec1RedologPo.getId());
//        }
//        if (jobExec1RedologPo.getJobLogLog() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.JOB_LOG_LOG.name(), jobExec1RedologPo.getJobLogLog());
//        }
//        if (jobExec1RedologPo.getBatchExecLogId() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.BATCH_EXEC_LOG_ID.name(), jobExec1RedologPo.getBatchExecLogId());
//        }
//        if (jobExec1RedologPo.getTaskExecLogId() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.TASK_EXEC_LOG_ID.name(), jobExec1RedologPo.getTaskExecLogId());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getBizCode())) {
//            queryWrapper.eq(JobExec1RedologColumns.BIZ_CODE.name(), jobExec1RedologPo.getBizCode());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getBatchCode())) {
//            queryWrapper.eq(JobExec1RedologColumns.BATCH_CODE.name(), jobExec1RedologPo.getBatchCode());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getTaskCode())) {
//            queryWrapper.eq(JobExec1RedologColumns.TASK_CODE.name(), jobExec1RedologPo.getTaskCode());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getJobCode())) {
//            queryWrapper.eq(JobExec1RedologColumns.JOB_CODE.name(), jobExec1RedologPo.getJobCode());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getAzCode())) {
//            queryWrapper.eq(JobExec1RedologColumns.AZ_CODE.name(), jobExec1RedologPo.getAzCode());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getDbCode())) {
//            queryWrapper.eq(JobExec1RedologColumns.DB_CODE.name(), jobExec1RedologPo.getDbCode());
//        }
//        if (jobExec1RedologPo.getBatchTriggerTime() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.BATCH_TRIGGER_TIME.name(), jobExec1RedologPo.getBatchTriggerTime());
//        }
//        if (jobExec1RedologPo.getTaskTriggerTime() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.TASK_TRIGGER_TIME.name(), jobExec1RedologPo.getTaskTriggerTime());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getExecDate())) {
//            queryWrapper.eq(JobExec1RedologColumns.EXEC_DATE.name(), jobExec1RedologPo.getExecDate());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getExecParams())) {
//            queryWrapper.eq(JobExec1RedologColumns.EXEC_PARAMS.name(), jobExec1RedologPo.getExecParams());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getExecStatus())) {
//            queryWrapper.eq(JobExec1RedologColumns.EXEC_STATUS.name(), jobExec1RedologPo.getExecStatus());
//        }
//        if (jobExec1RedologPo.getExitCode() != null) {
//            queryWrapper.eq(JobExec1RedologColumns.EXIT_CODE.name(), jobExec1RedologPo.getExitCode());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getExecResult())) {
//            queryWrapper.eq(JobExec1RedologColumns.EXEC_RESULT.name(), jobExec1RedologPo.getExecResult());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getStartupTime())) {
//            queryWrapper.eq(JobExec1RedologColumns.STARTUP_TIME.name(), jobExec1RedologPo.getStartupTime());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getEndTime())) {
//            queryWrapper.eq(JobExec1RedologColumns.END_TIME.name(), jobExec1RedologPo.getEndTime());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getCreateTime())) {
//            queryWrapper.eq(JobExec1RedologColumns.CREATE_TIME.name(), jobExec1RedologPo.getCreateTime());
//        }
//        if (StringUtil.isNotEmpty(jobExec1RedologPo.getExecResultDetailed())) {
//            queryWrapper.eq(JobExec1RedologColumns.EXEC_RESULT_DETAILED.name(), jobExec1RedologPo.getExecResultDetailed());
//        }
//		Page<JobExec1RedologPo> page = new Page<>(0, 1, false);
//		queryWrapper.orderBy(true, false, JobExec1RedologPoColumns.ID.name());
//    }

}
